<?php
/*
 * syt: afegeixo imatges i control
 */
/**
 * Get an tag in a db friendly way, by checking globals and passed variables to avoid extra class instantiations
 * @param mixed $id
 * @return EM_Tag
 */
function em_get_tag($id = false) {
	global $EM_Tag;
	//check if it's not already global so we don't instantiate again
	if( is_object($EM_Tag) && get_class($EM_Tag) == 'EM_Tag' ){
		if( $EM_Tag->term_id == $id ){
			return $EM_Tag;
		}elseif( is_object($id) && $EM_Tag->term_id == $id->term_id ){
			return $EM_Tag;
		}
	}
	if( is_object($id) && get_class($id) == 'EM_Tag' ){
		return $id;
	}else{
		return new EM_Tag($id);
	}
}
class EM_Tag extends EM_Object {	
	//Taxonomy Fields
	var $id = '';
	var $term_id;
	var $name;
	var $slug;
	var $term_group;
	var $term_taxonomy_id;
	var $taxonomy;
	var $description = '';
	var $parent = 0;
	var $count;
	var $image_url = '';

	
	/**
	 * Gets data from POST (default), supplied array, or from the database if an ID is supplied
	 * @param $tag_data
	 * @return null
	 */
	function EM_Tag( $tag_data = false ) {
		global $wpdb;
		//Initialize
		$tag = array();
		if( !empty($tag_data) ){
			//Load tag data
			if( is_object($tag_data) && !empty($tag_data->taxonomy) && $tag_data->taxonomy == EM_TAXONOMY_TAG ){
				$tag = $tag_data;
			}elseif( !is_numeric($tag_data) ){
				$tag = get_term_by('name', $tag_data, EM_TAXONOMY_TAG);
				if( empty($tag) ){
					$tag = get_term_by('slug', $tag_data, EM_TAXONOMY_TAG);					
				}
			}else{		
				$tag = get_term_by('id', $tag_data, EM_TAXONOMY_TAG);
			}
		}
		if( !empty($tag) ){
			foreach($tag as $key => $value){
				$this->$key = $value;
			}
			$this->id = $this->term_id; //backward compatability
		}
		do_action('em_tag',$this, $tag_data);
	}

	function get_color(){
		if( empty($this->color) ){
			global $wpdb;
			$color = $wpdb->get_var('SELECT meta_value FROM '.EM_META_TABLE." WHERE object_id='{$this->term_id}' AND meta_key='tag-bgcolor' LIMIT 1");
			$this->color = ($color != '') ? $color:'#FFFFFF';
		}
		return $this->color;
	}
	
	function get_image_url(){
		if( empty($this->image_url) ){
			global $wpdb;
			$image_url = $wpdb->get_var('SELECT meta_value FROM '.EM_META_TABLE." WHERE object_id='{$this->term_id}' AND meta_key='tag-image' LIMIT 1");
			$this->image_url = ($image_url != '') ? $image_url:'';
		}
		return $this->image_url;
	}
	
	function get_image_id(){
		if( empty($this->image_id) ){
			global $wpdb;
			$image_id = $wpdb->get_var('SELECT meta_value FROM '.EM_META_TABLE." WHERE object_id='{$this->term_id}' AND meta_key='tag-image-id' LIMIT 1");
			$this->image_id = ($image_id != '') ? $image_id:'';
		}
		return $this->image_id;
	}
	
	
	function get_url(){
		if( empty($this->link) ){
			$this->ms_global_switch();
			$this->link = get_term_link($this->slug, EM_TAXONOMY_TAG);
			$this->ms_global_switch_back();
			if ( is_wp_error($this->link) ) $this->link = '';
		}
		return $this->link;
	}
	
	function get_ical_url(){
		global $wp_rewrite;
		if( !empty($wp_rewrite) && $wp_rewrite->using_permalinks() ){
			return trailingslashit($this->get_url()).'ical/';
		}else{
			return em_add_get_params($this->get_url(), array('ical'=>1));
		}
	}

	function get_rss_url(){
		global $wp_rewrite;
		if( !empty($wp_rewrite) && $wp_rewrite->using_permalinks() ){
			return trailingslashit($this->get_url()).'feed/';
		}else{
			return em_add_get_params($this->get_url(), array('feed'=>1));
		}
	}
	
	function output_single($target = 'html'){
		$format = get_syt_option ( 'dbem_tag_page_format' );
		return apply_filters('em_tag_output_single', $this->output($format, $target), $this, $target);	
	}
	
	//syt: afegeixo imatges i control
	function output($format, $target="html") {
		preg_match_all('/\{([a-zA-Z0-9_]+)\}([^{]+)\{\/[a-zA-Z0-9_]+\}/', $format, $conditionals);
		if( count($conditionals[0]) > 0 ){
			foreach($conditionals[1] as $key => $condition){
				$format = str_replace($conditionals[0][$key], apply_filters('em_tag_output_condition', '', $condition, $conditionals[0][$key], $this), $format);
			}
		}
		$tag_string = $format;		 
	 	preg_match_all("/(#@?_?[A-Za-z0-9]+)({([a-zA-Z0-9,]+)})?/", $format, $placeholders);
	 	$replaces = array();
		foreach($placeholders[1] as $key => $result) {
			$match = true;
			$replace = '';
			$full_result = $placeholders[0][$key];
			switch( $result ){
				case '#_TAGNAME':
					$replace = $this->name;
					break;
				case '#_TAGID':
					$replace = $this->term_id;
					break;
				case '#_TAGNOTES':
				case '#_TAGDESCRIPTION':
					$replace = $this->description;
					break;
				case '#_TAGIMAGE':
				case '#_TAGIMAGEURL':
					if( $this->get_image_url() != ''){
						if($result == '#_TAGIMAGEURL'){
		        			$replace =  $this->get_image_url();
						}else{
							if( empty($placeholders[3][$key]) ){
								$replace = "<img src='".esc_url($this->get_image_url())."' alt='".esc_attr($this->name)."'/>";
							}else{
								$image_size = explode(',', $placeholders[3][$key]);
								if( $this->array_is_numeric($image_size) && count($image_size) > 1 ){
								    if( get_option('dbem_disable_timthumb') && $this->get_image_id() ){
								        //since we previously didn't store image ids along with the url to the image (since taxonomies don't allow normal featured images), sometimes we won't be able to do this, which is why we check there's a valid image id first
								    	$this->ms_global_switch();
								    	$replace = wp_get_attachment_image($this->get_image_id(), $image_size);
								    	$this->ms_global_switch_back();
								    }else{
										$width = ($image_size[0]) ? 'width="'.esc_attr($image_size[0]).'"':'';
										$height = ($image_size[1]) ? 'height="'.esc_attr($image_size[1]).'"':'';
										$replace = "<img src='".esc_url(em_get_thumbnail_url($this->get_image_url(), $image_size[0], $image_size[1]))."' alt='".esc_attr($this->name)."' $width $height />";
								    }
								}else{
									$replace = "<img src='".esc_url($this->get_image_url())."' alt='".esc_attr($this->name)."'/>";
								}
							}
						}
					} else {
						//syt: afegeixo imatges i control
						//TODO: posar una imatge de referencia generica
						$replace = "<img src='http://viajarconencanto.darsena.net/wp-content/uploads/2013/11/ubicacion-playas.jpg' alt=''/>";
					}
					break;
				case '#_TAGLINK':
				case '#_TAGURL':
					$link = $this->get_url();
					$replace = ($result == '#_TAGURL') ? $link : '<a href="'.$link.'">'.esc_html($this->name).'</a>';
					break;
				case '#_TAGICALURL':
				case '#_TAGICALLINK':
					$replace = $this->get_ical_url();
					if( $result == '#_TAGICALLINK' ){
						$replace = '<a href="'.esc_url($replace).'">iCal</a>';
					}
					break;
				case '#_TAGRSSURL':
				case '#_TAGRSSLINK':
					$replace = $this->get_rss_url();
					if( $result == '#_TAGRSSLINK' ){
						$replace = '<a href="'.esc_url($replace).'">RSS</a>';
					}
					break;
				case '#_TAGEVENTSPAST': //depreciated, erroneous documentation, left for compatability
				case '#_TAGEVENTSNEXT': //depreciated, erroneous documentation, left for compatability
				case '#_TAGEVENTSALL': //depreciated, erroneous documentation, left for compatability
				case '#_TAGPASTEVENTS':
				case '#_TAGNEXTEVENTS':
				case '#_TAGALLEVENTS':
					//convert depreciated placeholders for compatability
					$result = ($result == '#_TAGEVENTSPAST') ? '#_TAGPASTEVENTS':$result; 
					$result = ($result == '#_TAGEVENTSNEXT') ? '#_TAGNEXTEVENTS':$result;
					$result = ($result == '#_TAGEVENTSALL') ? '#_TAGALLEVENTS':$result;
					//forget it ever happened? :/
					if ($result == '#_TAGPASTEVENTS'){ $scope = 'past'; }
					elseif ( $result == '#_TAGNEXTEVENTS' ){ $scope = 'future'; }
					else{ $scope = 'all'; }
					$events_count = EM_Events::count( array('tag'=>$this->term_id, 'scope'=>$scope) );
					if ( $events_count > 0 ){
					    $args = array('tag'=>$this->term_id, 'scope'=>$scope, 'pagination'=>1, 'ajax'=>0);
					    $args['format_header'] = get_syt_option('dbem_tag_event_list_item_header_format');
					    $args['format_footer'] = get_syt_option('dbem_tag_event_list_item_footer_format');
					    $args['format'] = get_syt_option('dbem_tag_event_list_item_format');
						$args['limit'] = get_syt_option('dbem_tag_event_list_limit');
						$args['page'] = (!empty($_REQUEST['pno']) && is_numeric($_REQUEST['pno']) )? $_REQUEST['pno'] : 1;
					    $replace = EM_Events::output($args);
					} else {
						$replace = get_syt_option('dbem_tag_no_events_message');
					}
					break;
				case '#_TAGNEXTEVENT':
					$events = EM_Events::get( array('tag'=>$this->term_id, 'scope'=>'future', 'limit'=>1, 'orderby'=>'event_start_date,event_start_time') );
					$replace = get_syt_option('dbem_tag_no_event_message');
					foreach($events as $EM_Event){
						$replace = $EM_Event->output(get_syt_option('dbem_tag_event_single_format'));
					}
					break;
				case '#_TAGPASTLOCATIONS':
				case '#_TAGNEXTLOCATIONS':
				case '#_TAGALLLOCATIONS':
					//convert depreciated placeholders for compatability
					//forget it ever happened? :/
					if ($result == '#_TAGPASTLOCATIONS'){ $scope = 'past'; }
					elseif ( $result == '#_TAGNEXTLOCATIONS' ){ $scope = 'future'; }
					else{ $scope = 'all'; }
					$events_count = EM_Events::count( array('tag'=>$this->term_id, 'scope'=>$scope) );
					if ( $events_count > 0 ){
					    $args = array('tag'=>$this->term_id, 'scope'=>$scope, 'pagination'=>1, 'ajax'=>0);
					    $args['format_header'] = get_syt_option('dbem_location_list_item_format_header');
					    $args['format_footer'] = get_syt_option('dbem_location_list_item_format_footer');
					    $args['format'] = get_syt_option('dbem_location_list_item_format');
						$args['limit'] = get_syt_option('dbem_location_event_list_limit');
						$args['page'] = (!empty($_REQUEST['pno']) && is_numeric($_REQUEST['pno']) )? $_REQUEST['pno'] : 1;
					    $replace = EM_Locations::output($args);
					} else {
						$replace = get_syt_option('dbem_tag_no_events_message');
					}
					break;
				default:
					$replace = $full_result;
					break;
			}
			$replaces[$full_result] = apply_filters('em_tag_output_placeholder', $replace, $this, $full_result, $target);
		}
		krsort($replaces);
		foreach($replaces as $full_result => $replacement){
			$tag_string = str_replace($full_result, $replacement , $tag_string );
		}
		return apply_filters('em_tag_output', $tag_string, $this, $format, $target);	
	}
}
?>